package main

import (
	"io/ioutil"
	"log"
	"os"
	"strconv"
	"time"
)

// 日志输出
var logger = log.New(os.Stdout, "[日志输出] ", log.Lmicroseconds)

// 程序状态，0未开始，1运行中，2即将停止
var status int

func main() {

	// 第一个参数默认是程序的路径
	args := os.Args

	// 执行状态，0未知命令，1启动，2停止
	var runStatus int = 1

	// 没有参数默认启动
	if len(args) == 1 {
		runStatus = 1
	} else if len(args) > 1 {
		cmd := args[1]
		if cmd == "start" {
			runStatus = 1
		} else if cmd == "stop" {
			runStatus = 2
		} else {
			runStatus = 0
			logger.Fatalf("未知命令：%s", cmd)
		}
	}

	if 0 == runStatus {
		logger.Println("未知命令")
	} else if 1 == runStatus {
		// 启动程序
		// 获取状态
		status = getStatus()
		logger.Printf("状态:%d\n", status)
		if status != 0 {
			logger.Println("程序正在运行中")
			return
		}
		// 创建文件
		file, e := os.Create("run.pid")
		if e != nil {
			logger.Println("启动异常", e)
			return
		}
		_, e = file.Write([]byte("2"))
		e2 := file.Close()
		if e2 != nil {
			logger.Println("文件流关闭异常", e2)
		}
		if e != nil {
			logger.Println("写入状态异常", e)
			return
		}
		logger.Println("启动成功")
		for {
			time.Sleep(5 * time.Second)

			logger.Println("执行任务")
		}
	} else if 2 == runStatus {

	}
}

// 获取运行状态
func getStatus() int {
	bytes, e := ioutil.ReadFile("run.pid")
	if e != nil && os.IsNotExist(e) {
		// 文件不存在
		return 0
	}
	// 文件存在，读取内容
	s := string(bytes)
	i, e := strconv.Atoi(s)
	if e != nil {
		logger.Fatalf("未知状态：%s", s)
	}
	return i
}
